package com.lsa.letcode.the12.intToRoman;

import java.util.AbstractMap;

public class Solution {
	@SuppressWarnings("unchecked")
	private static AbstractMap.Entry<Integer, String>[] nToS = new AbstractMap.SimpleEntry[13];
	private static int idx = 0;
	
	static{
		init("I", 1);
		init("IV", 4);
		init("V", 5);
		init("IX", 9);
		init("X", 10);
		init("XL", 40);
		init("L", 50);
		init("XC", 90);
		init("C", 100);
		init("CD", 400);
		init("D", 500);
		init("CM", 900);
		init("M", 1000);
	}
	
	private static void init(String s, int n) {
		nToS[idx++] = new AbstractMap.SimpleEntry<Integer, String>(n, s);
	}
	
    public String intToRoman(int n) {
    	StringBuilder res = new StringBuilder();
    	
    	int i = nToS.length - 1;
    	while(n != 0) {
    		if (n < nToS[i].getKey()) {
    			i--;
    		}
    		else {
    			n -= nToS[i].getKey();
    			res.append(nToS[i].getValue());
    		}
    	}
    	
        return res.toString();
    }
}
